home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / DJGPP / LGP250S1.ZIP / src / libgplus.5 / libgplus / tests / tstack.cc < prev    next >
C/C++ Source or Header  |  1993-06-06  |  4KB  |  189 lines

  1. /*
  2.   test of stacks
  3. */
  4.  
  5. #ifdef PTIMES
  6. const int ptimes = 1;
  7. #else
  8. const int ptimes = 0;
  9. #endif
  10.  
  11. #include <stream.h>
  12. #include <assert.h>
  13. #include "iStack.h"
  14.  
  15. #define tassert(ex) {if ((ex)) cerr << #ex << "\n"; \
  16.                        else _assert(#ex, __FILE__,__LINE__); }
  17.  
  18.  
  19. int SIZE;
  20.  
  21. void print(intStack& a)
  22. {
  23.   int maxprint = 20;
  24.   cout << "[";
  25.   int k = 0;
  26.   while (!a.empty() && k++ < maxprint)
  27.     cout << a.pop() << " ";
  28.   if (k == maxprint) 
  29.     cout << "]\n";
  30.   else
  31.   {
  32.     while (!a.empty()) a.del_top();
  33.     cout << "...]\n";
  34.   }
  35.   assert(a.empty());
  36. }
  37.  
  38. #include "iXPStack.h"
  39.  
  40. void XPtest () 
  41. {
  42.   intXPStack s(SIZE/2);
  43.   assert(s.OK());
  44.   for (int i = 0; i < SIZE; ++i)
  45.     s.push(i);
  46.   assert(s.length() == SIZE);
  47.   assert(s.top() == (SIZE-1));
  48.   assert(!s.full());
  49.   intXPStack s1(SIZE*2);
  50.   for (i = 0; i < SIZE; ++i)
  51.   {
  52.     int x = s.pop();
  53.     assert(x == (SIZE-1) - i);
  54.     s1.push(x);
  55.   }
  56.   assert(s.empty());
  57.   assert(s1.length() == SIZE);
  58.   assert(s1.top() == 0);
  59.   assert(s.OK());
  60.   assert(s1.OK());
  61.   intXPStack s2 (s1);
  62.   assert(s2.length() == SIZE);
  63.   assert(s2.top() == 0);
  64.   assert(s2.OK());
  65.   s1.clear();
  66.   assert(s1.empty());
  67.   s1 = s2;
  68.   assert(s1.length() == SIZE);
  69.   assert(s1.top() == 0);
  70.   assert(s1.OK());
  71.   s1.del_top();
  72.   assert(s1.length() == (SIZE-1));
  73.   assert(s1.top() == 1);
  74.   cout << "s1:"; print(s1);
  75.   assert(s.OK());
  76.   assert(s1.OK());
  77.   assert(s2.OK());
  78. }
  79.  
  80. #include "iVStack.h"
  81.  
  82.  
  83. void Vtest () 
  84. {
  85.   intVStack s(SIZE);
  86.   assert(s.OK());
  87.   for (int i = 0; i < SIZE; ++i)
  88.     s.push(i);
  89.   assert(s.length() == SIZE);
  90.   assert(s.top() == (SIZE-1));
  91.   assert(s.full());
  92.   intVStack s1(SIZE);
  93.   for (i = 0; i < SIZE; ++i)
  94.   {
  95.     int x = s.pop();
  96.     assert(x == (SIZE-1) - i);
  97.     s1.push(x);
  98.   }
  99.   assert(s.empty());
  100.   assert(s1.length() == SIZE);
  101.   assert(s1.top() == 0);
  102.   assert(s.OK());
  103.   assert(s1.OK());
  104.   intVStack s2 (s1);
  105.   assert(s2.length() == SIZE);
  106.   assert(s2.top() == 0);
  107.   assert(s2.OK());
  108.   s1.clear();
  109.   assert(s1.empty());
  110.   s1 = s2;
  111.   assert(s1.length() == SIZE);
  112.   assert(s1.top() == 0);
  113.   assert(s1.OK());
  114.   s1.del_top();
  115.   assert(s1.length() == (SIZE-1));
  116.   assert(s1.top() == 1);
  117.   cout << "s1:"; print(s1);
  118.  
  119.   assert(s.OK());
  120.   assert(s1.OK());
  121.   assert(s2.OK());
  122. }
  123.  
  124. #include "iSLStack.h"
  125.  
  126. void SLtest () 
  127. {
  128.   intSLStack s;
  129.   assert(s.OK());
  130.   for (int i = 0; i < SIZE; ++i)
  131.     s.push(i);
  132.   assert(s.length() == SIZE);
  133.   assert(s.top() == (SIZE-1));
  134.   assert(!s.full());
  135.   intSLStack s1;
  136.   for (i = 0; i < SIZE; ++i)
  137.   {
  138.     int x = s.pop();
  139.     assert(x == (SIZE-1) - i);
  140.     s1.push(x);
  141.   }
  142.   assert(s.empty());
  143.   assert(s1.length() == SIZE);
  144.   assert(s1.top() == 0);
  145.   assert(s.OK());
  146.   assert(s1.OK());
  147.   intSLStack s2 (s1);
  148.   assert(s2.length() == SIZE);
  149.   assert(s2.top() == 0);
  150.   assert(s2.OK());
  151.   s1.clear();
  152.   assert(s1.empty());
  153.   s1 = s2;
  154.   assert(s1.length() == SIZE);
  155.   assert(s1.top() == 0);
  156.   assert(s1.OK());
  157.   s1.del_top();
  158.   assert(s1.length() == (SIZE-1));
  159.   assert(s1.top() == 1);
  160.  
  161.   cout << "s1:"; print(s1);
  162.   assert(s.OK());
  163.   assert(s1.OK());
  164.   assert(s2.OK());
  165. }
  166.  
  167.  
  168. int main(int argv, char** argc)
  169. {
  170.   if (argv > 1)
  171.   {
  172.     SIZE = abs(atoi(argc[1]));
  173.     SIZE &= ~1;
  174.   }
  175.   else
  176.     SIZE = 100;
  177.   start_timer();
  178.   cout << "XP stacks:\n"; XPtest();
  179.   if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
  180.   start_timer();
  181.   cout << "V stacks:\n"; Vtest();
  182.   if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
  183.   start_timer();
  184.   cout << "SL stacks:\n"; SLtest();
  185.   if (ptimes) cout << "\ntime = " << return_elapsed_time(0.0) << "\n";
  186.   cout << "\nEnd of test\n";
  187.   return 0;
  188. }
  189.